RDB 持久化存储
1.持久化的介绍
- Redis 是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失
- Redis 的两种持久化存储方式: RDB、AOF
- 可以同时配置 RDB 和 AOF 两种持久化存储方式
2.RDB 持久化的介绍
- redis 提供了 RDB 持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行,也可以在 redis.conf 中配置定期执行
- RDB 持久化产生的 RDB 文件 是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态
- 在指定的时间间隔内生成数据集的时间点快照
- 优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现
- RDB 持久化的两种执行方式: 手动执行、定期执行
3.RDB 持久化的配置
- 进入 redis 配置文件
vim /opt/redis-4.0.10/redis.conf
- 添加 RDB 持久化配置项
# 定义 RDB 持久化文件名
dbfilename dbmp.rdb
# 在 900 秒内,如果有 1 个修改记录,那么就进行持久化存储
save 900 1
# 在 300 秒内,如果有 10 个修改记录,那么就进行持久化存储
save 300 10
# 在 60 秒内,如果有 10000 个修改记录,那么就进行持久化存储
save 60 10000

- 重启 redis
- 查看 redis-server 的进程pid
ps -ef | grep redis

- 结束 redis-server 的进程
kill -KILL 7089
# 或
kill -9 7089

- 重新启动 redis-server
redis-server /opt/redis-4.0.10/redis.conf
3.RDB 持久化的使用
- 定期执行持久化存储
- 定期执行持久化存储只需要在 redis 配置文件进行配置即可
- 到达指定的时间点后,重启 redis 检查数据是否存在
- 手动执行持久化存储
- 命令: save
- 进入 redis
redis-cli -p 6380 -a 321
- 往 redis 中添加一个值
127.0.0.1:6380> set age 18
- 手动执行持久化存储
127.0.0.1:6380> save
- 检查是否生成了 RDB 持久化文件
ls /data/6380

- 重启 redis 检查数据是否存在
AOF 持久化存储
1.持久化的介绍
- Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失
- Redis 的两种持久化存储方式: RDB、AOF
- 可以同时配置 RDB 和 AOF 两种持久化存储方式
2.AOF 持久化的介绍
- 记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
- AOF 文件中的命令全部以redis协议的格式保存,新命令会追加到文件的末尾
- 优点: 最大程度保证数据不丢
- 缺点: 日记记录会非常的大(即: AOF 文件到了后期会非常的大)
3.AOF 持久化的配置
- 进入 redis 配置文件
vim /opt/redis-4.0.10/redis.conf
- 添加 AOF 持久化配置项
- appendfsync 配置项的参数说明
- always 同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)
- everysec 每秒做一次持久化存储 -> 推荐使用
- no 依赖于系统自带的缓存大小机制
# 定义 AOF 持久化文件名,如果不配置该参数,默认文件名为: appendonly.aof
appendfilename appendonly.aof
# 是否开启 AOF 持久化存储,默认为 no
appendonly yes
# 配置 AOF 的存储模式
appendfsync everysec
# appendfsync always
# appendfsync no

- 重启 redis
- 查看 redis-server 的进程pid
ps -ef | grep redis

- 结束 redis-server 的进程
kill -KILL 7089
# 或
kill -9 7089

- 重新启动 redis-server
redis-server /opt/redis-4.0.10/redis.conf
3.AOF 持久化的使用
- 检查是否生成了 AOF 持久化文件
ls /data/6380

- 进入 redis,往 redis 写入数据,然后重启 redis 检查数据是否存在
redis 不重启,切换RDB备份到AOF备份
1.确保 redis 版本在 2.2 以上
redis-server -v

2.实验环境的准备
- 进入 redis 配置文件
vim /opt/redis-4.0.10/redis.conf
- 配置 redis 配置文件
# 绑定远程连接ip,如需要远程访问当前服务器的redis(即: 让别人连接你的redis),那么就需要填写当前服务器的ip -> 0.0.0.0 代表 127.0.0.1 也代表 当前服务器ip
bind 0.0.0.0
# redis 端口
port 6380
# 是否后台运行 redis,在执行 redis-server redis.conf 命令时,如果为 yes 那么就不进入阻塞状态(即: 还可以输入其他命令),如果为 no 进入阻塞状态 (即: 无法输入别的命令)
daemonize yes
# 将 redis 进程id 写入到 redis.pid 文件中,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
pidfile /data/6380/redis.pid
# 日志级别
loglevel notice
# 日志文件,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
logfile "/data/6380/redis.log"
# 是否开启安全模式,如果开启,那么redis必须设置密码才能进行连接
protected-mode no
# 设置 redis 登陆密码
requirepass 321
# 配置 redis 的数据存放文件夹,一般存放redis的持久化存储文件和redis的日志文件等,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
dir /data/6380
# 定义 RDB 持久化文件名
dbfilename dbmp.rdb
# 在 900 秒内,如果有 1 个修改记录,那么就进行持久化存储
save 900 1
# 在 300 秒内,如果有 10 个修改记录,那么就进行持久化存储
save 300 10
# 在 60 秒内,如果有 10000 个修改记录,那么就进行持久化存储
save 60 10000
- 启动 redis-server
redis-server /opt/redis-4.0.10/redis.conf
- 手动执行持久化存储
- 进入 redis
redis-cli -p 6380 -a 321
- 往 redis 中添加值
127.0.0.1:6379> set name chaoge
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr shahe
OK
- 手动执行持久化存储
127.0.0.1:6380> save
- 检查是否生成了 RDB 持久化文件
ls /data/6380

3.备份 rdb 文件,保证数据的安全
cp /data/6380/dbmp.rdb /opt/
4.执行命令,切换 RDB 备份 到 AOF 备份中
- 进入 redis
redis-cli -p 6380 -a 321
- 执行切换命令
- 此时RDB已经正确切换AOF,注意还得修改redis.conf添加AOF设置,不然重启后,通过config set的配置将丢失
127.0.0.1:6380> config set appendonly yes # 临时开启 AOF 功能
OK
127.0.0.1:6380> config set save '' # 关闭 RDB 功能
OK
- 检查是否生成了 AOF 持久化文件
ls /data/6380

5.修改 redis 配置文件的设置,将 RDB 配置项删除,添加 AOF 配置项
- 进入 redis 配置文件
vim /opt/redis-4.0.10/redis.conf
- 修改 redis 配置文件
# 绑定远程连接ip,如需要远程访问当前服务器的redis(即: 让别人连接你的redis),那么就需要填写当前服务器的ip -> 0.0.0.0 代表 127.0.0.1 也代表 当前服务器ip
bind 0.0.0.0
# redis 端口
port 6380
# 是否后台运行 redis,在执行 redis-server redis.conf 命令时,如果为 yes 那么就不进入阻塞状态(即: 还可以输入其他命令),如果为 no 进入阻塞状态 (即: 无法输入别的命令)
daemonize yes
# 将 redis 进程id 写入到 redis.pid 文件中,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
pidfile /data/6380/redis.pid
# 日志级别
loglevel notice
# 日志文件,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
logfile "/data/6380/redis.log"
# 是否开启安全模式,如果开启,那么redis必须设置密码才能进行连接
protected-mode no
# 设置 redis 登陆密码
requirepass 321
# 配置 redis 的数据存放文件夹,一般存放redis的持久化存储文件和redis的日志文件等,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
dir /data/6380
# 是否开启 AOF 持久化存储,默认为 no
appendonly yes
# 配置 AOF 的存储模式
appendfsync everysec
- 重启 redis
pkill redis
redis-server /opt/redis-4.0.10/redis.conf
6.进入 redis,往 redis 写入数据,然后重启 redis 检查数据是否存在